PAI-ChatLearn :灵活易用、大规模 RLHF 高效训练框架(阿里云最新实践)
导读 PAI-ChatLearn 是阿里云机器学习平台 PAI 团队自主研发的,灵活易用、大规模模型 RLHF 高效训练框架,支持大模型进行 SFT(有监督指令微调)、RM(奖励模型)、RLHF(基于人类反馈的强化学习)完整训练流程。PAI-ChatLearn 支持训练和推理组合使用不同的 backend,可对各个模型配置不同并行策略和灵活的资源分配,支持大规模(175B + 175B)模型的 RLHF 高效训练,性能比业界框架有较大提升,有助于用户专注于模型效果调优。
本次的分享会围绕下面四点展开:1. 大模型训练方式演进
2. PAI-ChatLearn 框架介绍
3. PAI-ChatLearn 使用示例
4. 问答环节
分享嘉宾|张杰(王林) 阿里云 人工智能平台PAI深度学习框架负责人
编辑整理|王帅 金山云
内容校对|李瑶
出品社区|DataFun
1. 数据并行(Data Parallelism)
2. 模型并行
张量并行 将模型的张量(Tensor)切分成多个片段,每个计算单元(如GPU)负责存储和计算其中的一部分。这种方法可以有效地减少每个计算单元上的内存占用,从而支持更大模型的训练。 缺点:可能会导致大量的跨设备通信,因此它更适合于具有高带宽的内部机器通信,如使用 NVLink 的场景。 流水并行(Pipeline Parallelism) 将模型按照层(Layer)进行切分,每个计算单元负责模型中一部分层的计算。这种方式同样可以减轻单个计算单元的内存负担,并且有助于支持更大规模的模型训练。通信需求相对较小,适合于基础设施较弱、带宽较低的环境。 缺点:可能会引入大量的空闲时间(Bubbles),需精心设计流水线以避免产生大量的等待时间。 其他模型并行变体 Mixture of Experts (MoE) 中的专家并行(Expert Parallelism)会将专家模块分布到不同的计算单元上。 序列并行(Sequence Parallelism)会在训练过程中将激活函数的输出(Activation)分散存储,以此减少显存占用。
3. 任务并行
多任务/多模态模型训练 需要在任务维度进行并行训练,如谷歌提出的 Pathways 架构,不同任务之间可能会共享参数。又如 GPT-4v,是多模态模型,能处理语音、文本等不同类型的数据。 大模型结合 RLHF 来提升模型效果,如 ChatGPT、GPT4 等都进行了 RLHF。 从单程序多数据(SPMD)模式向多程序多数据(MPMD)模式转变。
(1)RLHF
步骤一:预训练语言模型 预训练语言模型,并进行 SFT(Supervised Fine-Tuning),在人工精心撰写的语料上进行微调。 开源的预训练模型:Qwen、LLaMA、Baichuan 等。 步骤二:训练奖励模型(RM) 训练奖励模型判断模型生成的文本是否符合人类偏好。 开源的奖励模型:Ziya-LLaMA-7B-Reward 等。 步骤三:使用强化学习进行微调 结合人类反馈信号,使用强化学习来微调模型。 社区模型:ChatGPT、GPT4、GPT4-Turbo 等。
(2)ChatLearn 框架构建必要性
PAI-ChatLearn 框架介绍
1. PAI-ChatLearn 框架
支持 SFT(有监督的微调)、RM(奖励模型)、RLHF 全流程训练 Policy、Value model 的推理和训练分离,支持高效 weight 同步 由于训练和推理的特点不同,所需资源和并行策略也不尽相同。 HF 训练过程较复杂,(如策略模型(Policy Model)既参与生成(generation)也参与训练(training)),会对模型进行分割,如将推理(inference)和训练的模型分开,采用不同的并行策略,以实现高效的训练和推理。 实现了基于高速通道的参数同步机制,以确保模型参数的最终一致性,实现更高效的训练。 训练、推理支持不同 backend,实现环境隔离。如在训练中可以使用 Megatron 作为后端,而在推理中可以使用 VIM 框架,这样的组合可能会达到更好的效果。 各模型支持独立配置并行策略和资源,分布式 actor 的设计。 支持任意规模模型(如 175B+175B)训练 单机视角编程,分布式执行,用户在编写代码时不需要关心底层模型的分配和执行。
2. PAI-ChatLearn 架构简介
(1)API 层
RLHF Module 是一个通用的抽象 RLHF 模块接口。通过这个接口,用户只需实现一些方法的封装,就可以完成不同模型的构建。 RLHF Config 配置 e2e 训练参数 Model Config 配置各个 model 的参数
(2)引擎层
DistActor 用来抽象单个分布式任务和资源,负责各个 model 的执行环境和资源分配,可实现灵活扩展。 训练和推理容许使用不同的 Backend。如推理可以使用 PyTorch 或 vLLM 框架,训练后端可以选择 Megatron、DeepSpeed 或自研的框架。 还进行了各种优化,包括计算、通信和显存优化,以确保训练性能。
3. PAI-ChatLearn 训练核心流程
4. PAI-ChatLearn 训练配置
5. PAI-ChatLearn 接口-模型定义
PAI-ChatLearn 使用示例
1. 开源 transformers 模型示例
(1)镜像和模型准备
镜像:
PAI-DLC 平台上提供已经准备好的镜像或参考 ChatLearn 提供的 Dockerfile 自定义镜像
模型:
下载开源模型,例如从 Huggingface 或 ModeScope 上下载。
如果是 HuggingFace transformers 的模型,调用 ChatLearn 提供的工具将 transformers 模型转成 Megatron-LM 格式,支持修改模型的并行策略。
(2)训练步骤
步骤一:训练 SFT 模型
准备 SFT 训练的数据:
格式:{'query':问题,'response':回复}
训练方式:
转换好的模型,调用 ChatLearn 进行 SFT 训练
训练好保存 SFT 模型
如果有训练好的SFT 模型,这个步骤可以跳过
步骤二:训练奖励模型(RM)
准备 RM 训练的数据:
格式:{'query':问题,'response':[回复1, 回复2, .....],'score':[score1,score2,.....]}
训练方法:
定义 RM,一般主体结构复用 SFT,增加一个 head 层
使用训练好的 SFT 模型参数初始化 RM
调用 ChatLearn 进行 RM 训练
保存训练好的模型
步骤三:使用强化学习进行微调
准备 RL 训练的数据:
格式:{"prompt":问题}
训练方法:
定义 Policy/Reference Model,结构和 SFT 模型一致
使用 SFT 模型参数初始化 Policy/Reference Model
定义 Reward/Value model,结构和 Reward Model 一致
使用 RM 模型参数初始化 Reward/Value model
调用 ChatLearn 进行 RLHF 训练
保存训练好的模型
步骤四:Inference
离线批量预测
准备好需要预测的数据集合
调用 ChatLearn 加载训练好的 RLHF 模型进行离线批量预测
在线预测
调用 ChatLearn 工具将训练好的 RLHF 模型转成 Transformer 格式
调用 PAI-EAS 或 vLLM 部署模型进行在线预测
2. Vicuna 13B+13B 训练效果
Base 模型使用 Vicuna 13B,RM 也采用 13B 规模;
在 HH(helpful&harmless)数据集进行 SFT、RM、RLHF 训练;
RLHF 训练使用了 16 GPUs;
RLHF 训练中 Reward Model 的评分如图所示;
在 MT-Bench 上使用 GPT-4 API 测评 SFT 和 RLHF 模型的效果,平均得分提升 11%。
ChatLearn 性能:
A800 上测试不同规模 RLHF 训练 ChatLearn 的性能
Policy 和 Reward Model 使用相同规模配置
相比于 DeepSpeed-chat,7B+7B~30B+30B 规模比 DeepSpeed-chat 快 48%~82%
66B + 66B 时 32 GPUs 上 DeepSpeed-chat 会 OOM,ChatLearn 可以正常训练
ChatLearn 可以支持 175B+175B 等更大规模模型训练
3. PAI-ChatLearn 效果
Qwen-14B 上的效果:
Policy 和 Reward Model 都是 14B;
基础评测上效果如上图所示,优于同规模的其他开源模型;
构造一个包含广泛主题的测试数据集进行人工评测,RLHF 训练的模型效果明显优于 SFT 模型。测试题包括知识类、语言理解类,创作类、数学类,编码类等能力。
问答环节
Q1:Reward 模型中有多种评分机制,如科学准确性、合规性以及人性化表达等,是否有多维度奖励模型评测的实际工程经验?
分享嘉宾
INTRODUCTION
张杰(王林)
阿里云
人工智能平台PAI深度学习框架负责人
张杰,长期从事大数据、云计算、深度学习相关方向,擅长云计算、深度学习平台、超大规模模型训练、自动模型并行策略等领域。负责 PAI 平台的深度学习框架 ChatLearn、TorchAcc 和 EPL 等。
直播推荐
往期推荐
点个在看你最好看